package com.example.rwq_test.util;

import lombok.extern.slf4j.Slf4j;
import org.springframework.stereotype.Component;

/**
 * 亚马逊S3客户端工具类
 *
 * @author renweiqiang
 * @version 1.0.0
 * @createTime 2024/3/15
 */
@Slf4j
@Component
public class AwsS3ClientUtil {
//    private static AwsS3Config awsS3Config;
//    private static S3Client s3Client;
//    private static S3Presigner s3Presigner;
//
//    @Autowired
//    private void setAwsS3Config(AwsS3Config awsS3Config) {
//        AwsS3ClientUtil.awsS3Config = awsS3Config;
//    }
//
//    @Autowired
//    private void setS3Client(S3Client s3Client) {
//        AwsS3ClientUtil.s3Client = s3Client;
//    }
//
//    @Autowired
//    private void setS3Presigner(S3Presigner s3Presigner) {
//        AwsS3ClientUtil.s3Presigner = s3Presigner;
//    }
//
//    /**
//     * 上传文件
//     *
//     * @param bucket 桶
//     * @param fileName 文件名
//     * @param inputStream 输入流
//     * @return
//     */
//    public static Boolean uploadObject(String bucket, String fileName, InputStream inputStream) {
//        if (StringUtils.isEmpty(bucket) || StringUtils.isEmpty(fileName)) {
//            log.warn("uploadObject param isEmpty.");
//            return null;
//        }
//        try {
//            PutObjectRequest request = PutObjectRequest.builder().bucket(bucket).key(fileName).build();
//            RequestBody requestBody = RequestBody.fromInputStream(inputStream, inputStream.available());
//            PutObjectResponse response = s3Client.putObject(request, requestBody);
//            return response.sdkHttpResponse().isSuccessful();
//        } catch (Exception e) {
//            log.error("uploadObject Exception. fileName: {}", fileName, e);
//        }
//        return false;
//    }
//
//    /**
//     * 下载文件
//     *
//     * @param bucket 桶
//     * @param fileName 文件名
//     * @return
//     */
//    public static byte[] downloadObject(String bucket, String fileName) {
//        if (StringUtils.isEmpty(bucket) || StringUtils.isEmpty(fileName)) {
//            log.warn("downloadObject param isEmpty.");
//            return null;
//        }
//        try (ByteArrayOutputStream buffer = new ByteArrayOutputStream())  {
//            GetObjectRequest request = GetObjectRequest.builder().bucket(bucket).key(fileName).build();
//            try (ResponseInputStream<GetObjectResponse> inputStream = s3Client.getObject(request)) {
//                int nRead;
//                byte[] data = new byte[1024];
//                while ((nRead = inputStream.read(data, 0, data.length)) != -1) {
//                    buffer.write(data, 0, nRead);
//                }
//                buffer.flush();
//            }
//            return buffer.toByteArray();
//        } catch (Exception e) {
//            log.error("downloadObject Exception. fileName: {}", fileName, e);
//        }
//        return null;
//    }
//
//    /**
//     * 文件是否存在
//     *
//     * @param bucket 桶
//     * @param fileName 文件名
//     * @return
//     */
//    public static Boolean isExistObject(String bucket, String fileName) {
//        if (StringUtils.isEmpty(bucket) || StringUtils.isEmpty(fileName)) {
//            log.warn("isExistObject param isEmpty.");
//            return null;
//        }
//        try {
//            HeadObjectRequest request = HeadObjectRequest.builder().bucket(bucket).key(fileName).build();
//            try {
//                HeadObjectResponse response = s3Client.headObject(request);
//                return true;
//            } catch (S3Exception e) {
//                if (e.statusCode() == HttpStatus.HTTP_NOT_FOUND) {
//                    log.warn("isExistObject not found. fileName: {}", fileName);
//                    return false;
//                } else {
//                    throw e;
//                }
//            }
//        } catch (Exception e) {
//            log.error("isExistObject Exception. fileName: {}", fileName, e);
//        }
//        return false;
//    }
//
//    /**
//     * 获取文件url
//     *
//     * @param bucket 桶
//     * @param fileName 文件名
//     * @return
//     */
//    public static String getObjectGetUrl(String bucket, String fileName) {
//        if (StringUtils.isEmpty(bucket) || StringUtils.isEmpty(fileName)) {
//            log.warn("getObjectGetUrl param isEmpty.");
//            return null;
//        }
//        try {
//            GetObjectPresignRequest request = GetObjectPresignRequest.builder()
//                    .signatureDuration(Duration.ofDays(awsS3Config.getUrlExpire()))
//                    .getObjectRequest(GetObjectRequest.builder().bucket(bucket).key(fileName).build())
//                    .build();
//
//            PresignedGetObjectRequest getObjectRequest = s3Presigner.presignGetObject(request);
//            return getObjectRequest.url().toExternalForm();
//        } catch (Exception e) {
//            log.error("getObjectGetUrl Exception. fileName: {}", fileName, e);
//        }
//        return null;
//    }
//
//    /**
//     * 删除文件
//     *
//     * @param bucket 桶
//     * @param fileName 文件名
//     * @return
//     */
//    public static Boolean deleteObject(String bucket, String fileName) {
//        if (StringUtils.isEmpty(bucket) || StringUtils.isEmpty(fileName)) {
//            log.warn("deleteObject param isEmpty.");
//            return true;
//        }
//        try {
//            DeleteObjectRequest request = DeleteObjectRequest.builder().bucket(bucket).key(fileName).build();
//            s3Client.deleteObject(request);
//            return true;
//        } catch (Exception e) {
//            log.error("deleteObject Exception. fileName: {}", fileName, e);
//        }
//        return false;
//    }
}
